#ifndef __BSP__ADC_H__
#define __BSP__ADC_H__

#include "bsp_cfg.h"

// ADC转换为电压值（单位)
#define ADC2Voltage(Xadc) (Xadc * 1.2f / 4095)

// 温度ADC转换为温度值（单位:℃);
// 转换关系《FM33LG0XXA-ADC应用说明.pdf》ADC参考电压VREFP=1.5V
#define ADC2Temp(Xadc) (((Xadc * 1.5f / 3 - ADC_TS) / 3.06) + 30)

#define FILTER_SIZE 10 // 滤波缓冲区大小

typedef struct
{
    float   buffer[FILTER_SIZE]; // 存储历史数据的缓冲区
    uint8_t index;               // 当前写入位置
    uint8_t count;               // 已存储的数据数量
    float   sum;                 // 当前所有数据的总和
} MovingAvgFilter_t;

typedef struct
{
    float             Res_value;
    MovingAvgFilter_t filter; // 新增的滤波器
} Res_adj_data_t;

extern Res_adj_data_t res_data_arr[];
extern float          TEMP_Value;

typedef enum
{
    PULS_01 = 0U,
    PULS_02,
    PULS_03,
    PULS_04,
    PULS_05,
    PULS_06,
    PULS_07,
    PULS_08,
    PULS_09,
    PULS_10,
    PULS_11,
    PULS_12,
    PULS_13,
    PULS_14,
    // NTC_EN,
    ADC_CH_MAX,
    //------other
    ADC_IN = ADC_CH_MAX,
} adc_ctl_pin_enum;

void Bsp_ADC_init(void);
void ADC_switch_ch(uint8_t first_flag);
#endif
